/**
 * mongodb连接以及schema的配置
 */
import { Module, Global } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
// 统一使用
import { MongodbService } from './mongodb.service';

// 引入schema
import { User, UserSchema } from './schema/user.schema';
import { Depart, DepartSchema } from './schema/depart.schema';
import { Role, RoleSchema } from './schema/role.schema';
import { UserRole, UserRoleSchema } from './schema/userRole.schema';
import { Menu, MenuSchema } from './schema/menu.schema';

@Global()
@Module({
  imports: [
    // 异步连接（因env是异步加载，所以此处也需要异步加载）
    MongooseModule.forRootAsync({
      useFactory: () => ({
        // 连接字符串
        uri: `mongodb://${process.env.MONGODB_SERVER}:${process.env.MONGODB_PORT}`,
        user: process.env.MONGODB_USER, // 数据库用户
        pass: process.env.MONGODB_PASS, // 数据库用户密码
        dbName: process.env.MONGODB_DBNAME, // 需要连接到的数据库名
        authSource: process.env.MONGODB_AUTH_SOURCE, // 需要验证的数据库名,一般和dbName一致
        authMechanism: process.env.MONGODB_AUTH_MECHANISM as 'SCRAM-SHA-256' | 'SCRAM-SHA-1', // 验证方式,一般为SCRAM-SHA-256或SCRAM-SHA-1
      }),
    }),
    MongooseModule.forFeature([
      // 人员模型
      { name: User.name, schema: UserSchema },
      // 角色模型
      { name: Role.name, schema: RoleSchema },
      // 人员角色关联模型
      { name: UserRole.name, schema: UserRoleSchema },
      // 部门模型
      { name: Depart.name, schema: DepartSchema },
      // 菜单模型
      { name: Menu.name, schema: MenuSchema },
    ]),
  ],

  providers: [MongodbService],
  exports: [MongodbService],
})
export class MongodbModule {}

// //下面是连接两个mongo数据库的例子
// @Global()
// @Module({
//   imports: [
//     // 异步连接（因env是异步加载，所以此处也需要异步加载）
//     MongooseModule.forRootAsync({
//       connectionName: 'UserDB',
//       useFactory: () => ({
//         // 连接字符串
//         uri: `mongodb://${process.env.MONGODB_SERVER}:${process.env.MONGODB_PORT}`,
//         user: process.env.MONGODB_USER, // 数据库用户
//         pass: process.env.MONGODB_PASS, // 数据库用户密码
//         dbName: process.env.MONGODB_DBNAME, // 需要连接到的数据库名
//         authSource: process.env.MONGODB_AUTH_SOURCE, // 需要验证的数据库名,一般和dbName一致
//         authMechanism: process.env.MONGODB_AUTH_MECHANISM as
//           | 'SCRAM-SHA-256'
//           | 'SCRAM-SHA-1', // 验证方式,一般为SCRAM-SHA-256或SCRAM-SHA-1
//       }),
//     }),
//     MongooseModule.forRootAsync({
//       connectionName: 'DepartDB',
//       useFactory: () => ({
//         // 连接字符串
//         uri: `mongodb://${process.env.MONGODB_SERVER}:${process.env.MONGODB_PORT}`,
//         user: process.env.MONGODB_USER, // 数据库用户
//         pass: process.env.MONGODB_PASS, // 数据库用户密码
//         dbName: process.env.MONGODB_DBNAME, // 需要连接到的数据库名
//         authSource: process.env.MONGODB_AUTH_SOURCE, // 需要验证的数据库名,一般和dbName一致
//         authMechanism: process.env.MONGODB_AUTH_MECHANISM as
//           | 'SCRAM-SHA-256'
//           | 'SCRAM-SHA-1', // 验证方式,一般为SCRAM-SHA-256或SCRAM-SHA-1
//       }),
//     }),
//     MongooseModule.forFeature(
//       [
//         // 人员模型
//         { name: User.name, schema: UserSchema },
//       ],
//       'UserDB',
//     ),
//     MongooseModule.forFeature(
//       [
//         // 部门模型
//         { name: Depart.name, schema: DepartSchema },
//       ],
//       'DepartDB',
//     ),
//   ],

//   providers: [MongodbService],
//   exports: [MongodbService],
// })
// export class MongodbModule {}
